/*
    这是一个专门处理pinia实例的文件、避免了pinia未挂载就使用会出现
    错误的问题，通用的，使用pinia store的 地方都可以直接使用这个文件
*/

import { ElMessage } from "element-plus";
import { useGlobalState } from "../store/globalState";
import { userStore } from "../store/userStore";
import { friendStore } from "../store/friendStore";
import { chatStore } from "../store/chatStore";
import type { FactoryResult } from "../types/types";

export function useFactory(): Promise<FactoryResult> {
    return new Promise((resolve, reject) => {
        try {
            setTimeout(() => {
                const globalState = useGlobalState();
                if (globalState.appMounted) {
                    resolve({
                        user_store: userStore(),
                        friend_store: friendStore(),
                        chat_store: chatStore()
                    })
                } else {
                    ElMessage.error("挂载失败！");
                }
            }, 100);        // 在这里加个延迟调用100毫秒
        } catch (error) {
            console.error(error)
        }
    })
}






interface PiniaStore {
    user_store: ReturnType<typeof userStore> | null,
    friend_store: ReturnType<typeof friendStore> | null,
    chat_store: ReturnType<typeof chatStore> | null
}
function wait(ms: number) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
// 延迟获取pinia store的函数（基本通用）
export async function awaitPiniaStore(ms: number): Promise<PiniaStore> {
    console.log("start wait");
    await wait(ms);
    // 构建piniaStore对象
    const factory = {
        user_store: userStore(),
        friend_store: friendStore(),
        chat_store: chatStore()
    }
    console.log("end wait");
    console.log(factory);
    return factory;
}


export function lazyLoadPiniaStore(): Promise<{
    user_store: ReturnType<typeof userStore>;
    friend_store: ReturnType<typeof friendStore>;
    chat_store: ReturnType<typeof chatStore>
}> {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve({
                user_store: userStore(),
                friend_store: friendStore(),
                chat_store: chatStore()
            });
        }, 20);
    });
}

